<template>
  <div class="box-container">
    <div class="header center">用户登录</div>
    <div class="body">
      <div class="username">
        <el-input
          placeholder="请输入用户名"
          prefix-icon="el-icon-user"
          v-model="fromData.username"
        >
        </el-input>
      </div>
      <div class="password">
        <el-input
          placeholder="请输入密码"
          prefix-icon="el-icon-lock"
          v-model="fromData.password"
          show-password
          @keyup.enter="handleLogin"
        >
        </el-input>
      </div>
      <div class="login center" @click="handleLogin" v-loading="loading">
        登 录
      </div>
      <div class="footer">
        <el-link type="primary" @click="handleRegister">注册用户</el-link>
      </div>
    </div>
  </div>
</template>

<script>
// import { eventBus } from "@/utils/eventBus";
import { login } from "@/api/modules/user";
export default {
  name: "LoginComp",
  data() {
    return {
      fromData: {
        username: "",
        password: "",
      },
      loading: false,
    };
  },
  methods: {
    handleRegister() {
      // 跳转到 注册用户 组件上 - Register
      this.$emit("toggleComponet", "Register");
    },
    /* 
      本函数的作用：将  ajax 请求，关于 登录的代码，放到 本函数中
    */
    async ajaxLogin() {
      this.loading = true;

      let res = null;
      try {
        res = await login(this.fromData);
      } catch (err) {
        this.$message.error("login 接口报错啦");
      } finally {
        this.loading = false;
      }

      // 和后端约定：若 code 值为1，表示 登录成功
      if (res.code === 1) {
        localStorage.setItem("token", res.token);
        localStorage.setItem("id", res.user.id);
        console.log(res);
        setTimeout(() => {
          this.$router.push("/");
        }, 1000);
      } else {
        this.$message.error("123");
        // 不能路由跳转，因为 登录失败
      }
    },
    async handleLogin() {
      if (this.loading) {
        // 即 若 loading 的时候，不能直接 下面的代码
        // 避免，重复调用接口
        return;
      }

      // 即在 handleLogin 中，调用本函数 - ajaxLogin
      // 那么这种，函数中封装函数的思想：「组合式」编程 - composition / compose
      this.ajaxLogin();
    },
  },
};
</script>

<style scoped lang="scss">
.box-container {
  width: 400px;
  height: 310px;
  background: white;
  padding: 0 20px;
  border-radius: 10px;
  .header {
    height: 60px;
    line-height: 60px;
  }

  .body > div {
    height: 40px;
    margin-bottom: 30px;
  }

  .body > .login {
    background-color: #448ef7;
    color: white;
    user-select: none;
    cursor: pointer;
  }
  .body > .login:hover {
    opacity: 0.9;
  }
}
</style>
